#include <iostream>
// 饿汉模式: 以空间换时间
// class Singleton
// {
// private:
//     static Singleton _eton;
//     Singleton(const Singleton &) = delete;
//     Singleton() : _data(123)
//     {
//         std::cout << "饿汉模式单例构造\n";
//     }
//     int _data;
//     ~Singleton() {}

// public:
//     static Singleton &getInstance()
//     {
//         return _eton;
//     }
//     int getData() { return _data; }
// };

// Singleton Singleton::_eton;

// 懒汉模式: 懒加载--延迟加载--一个对象在用的时候再实例化
class Singleton
{
private:
    Singleton() : _data(789)
    {
        std::cout << "懒汉模式单例构造\n";
    }
    Singleton(const Singleton &) = delete;
    ~Singleton() {}

private:
    int _data;

public:
    static Singleton &getInstance()
    {
        //在C++11中, 静态变量可以在满足线程安全的前提下唯一的被构造和被析构!
        static Singleton _eton;
        return _eton;
    }
    int getData() { return _data; }
};
int main()
{
    std::cout<<Singleton::getInstance().getData()<<std::endl;
    return 0;
}